package leetcode.editor.cn;
//给你两个二进制字符串 a 和 b ，以二进制字符串的形式返回它们的和。 
//
// 
//
// 示例 1： 
//
// 
//输入:a = "11", b = "1"
//输出："100" 
//
// 示例 2： 
//
// 
//输入：a = "1010", b = "1011"
//输出："10101" 
//
// 
//
// 提示： 
//
// 
// 1 <= a.length, b.length <= 104 
// a 和 b 仅由字符 '0' 或 '1' 组成 
// 字符串如果不是 "0" ，就不含前导零 
// 
// Related Topics 位运算 数学 字符串 模拟 
// 👍 976 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
class Solution9 {
    public String addBinary(String a, String b) {
        final int aLength = a.length();
        final int bLength = b.length();
        int i = aLength - bLength;
        int n;
        if (i > 0) {
            for (int j = i; j > 0; j--) {
                b = "0" + b;
            }
            n = aLength;
        } else {
            for (int j = i; j < 0; j++) {
                a = "0" + a;
            }
            n = bLength;
        }


        char ca,cb;
        int num_1 = 0;
        StringBuilder result = new StringBuilder();
        while (n > 0) {
            ca = a.charAt(n-1);
            cb = b.charAt(n-1);
            if (ca == '1' && cb == '1') {
                result.append(num_1);
                num_1 = 1;
            } else if (ca == '0' && cb == '0') {
                result.append(num_1);
                num_1 = 0;
            } else {
                if (num_1 == 1) {
                    result.append(0);
                    num_1 = 1;
                } else {
                    result.append(1);
                    num_1 = 0;
                }
            }
            n--;
        }
        if (num_1 == 1) {
            result.append("1");
        }
        return result.reverse().toString();
    }
}
//leetcode submit region end(Prohibit modification and deletion)
